package com.example.edwinanimation

import android.animation.Animator
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.os.Bundle
import android.util.Log
import android.view.animation.OvershootInterpolator
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.lifecycleScope
import com.example.edwinanimation.databinding.ActivityMainBinding
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch

/**
 * 初学动画一
 */
class MainActivity2 : AppCompatActivity() {
    private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()

        setContentView(binding.root)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }


    }

    
    //属性集动画 ：顺序执行，旋转+平移
    private fun animationSet() {
        val ofFloat = ObjectAnimator.ofFloat(binding.ivAnimation, "rotation", 90f)
        val ofFloat2 = ObjectAnimator.ofFloat(binding.ivAnimation, "translationX", 200f)

        val animatorSet = AnimatorSet()
        animatorSet.playSequentially(
            ofFloat,
            ofFloat2
        ) // 关键：顺序播放,一个完成以后，另外一个才继续。动画按添加顺序一个接一个执行 旋转动画完全结束后才开始平移动画
        animatorSet.startDelay = 2000 // 延迟2秒启动
        animatorSet.start()//每个动画默认300毫秒
    }


    //左右抖动动画。
//    lifecycleScope.launch {
//        wobbleAnimation.startDelay=3000
//        wobbleAnimation.start()
//    }
    //左右抖动动画。
    private val wobbleAnimation: AnimatorSet by lazy {
        // 创建旋转动画对象
        // 该动画将操作 binding.ivAnimation 视图的 "rotation" 属性
        val wobbleAnimation = ObjectAnimator.ofFloat(
            binding.ivAnimation, "rotation", // 目标视图 要操作的属性（旋转角度）
            0f, 10f, -10f, // 起始点：0度（水平位置） 第一摆动：向右旋转10度 向左摆动10度（相对于起始点）
            10f, -10f,// 再次向右摆动10度 再次向左摆动10度
            10f, -10f,
            10f, -10f,
            10f, -10f,
            10f, -10f, 0f,
            //  0f, 15f, -12f, 9f, -6f, 3f, -3f, 2f, -1f, 0f
            )

        // 组合动画序列
        AnimatorSet().apply {
            // 设置要播放的动画序列（这里只有一个动画对象）
            playSequentially(wobbleAnimation)

            // 设置动画持续时间为整个序列的时长（不包括循环）
            duration = 1500
            // 设置插值器，控制动画的加速/减速曲线
            // AccelerateDecelerateInterpolator：开始和结束慢，中间快
            interpolator = android.view.animation.AccelerateDecelerateInterpolator()

            // 设置动画监听器（可选），用于在动画不同阶段执行操作
            addListener(object : Animator.AnimatorListener {
                override fun onAnimationStart(animation: Animator) {
                    // 动画开始时的操作
                    Log.d("WobbleAnimation", "摇动动画开始")

                    // 设置旋转中心点（底部中心） 默认是中心
//                    binding.ivAnimation.apply {
//                        pivotX = width / 2f   // X轴中心点
//                        pivotY = height.toFloat() // Y轴底部
//                    }
                }

                override fun onAnimationEnd(animation: Animator) {
                    // 动画结束时的操作
                    Log.d("WobbleAnimation", "摇动动画结束")

                }

                override fun onAnimationCancel(animation: Animator) {
                    // 动画被取消时的操作
                    Log.d("WobbleAnimation", "动画取消")
                }

                override fun onAnimationRepeat(animation: Animator) {
                    // 动画重复时的操作（本动画未设置重复）
                }
            })
        }
    }
}